Computing devices execute applications and/or processes. In execution, the applications perform computations, input and output information, etc. all of which generates data. The data can be stored on a storage device local to the computing device or a system remote to the computing device. At any point in time, a computing device may experience a failure and lose the generated data, which may be catastrophic to the application and its users. As such, the industry has developed data recovery systems and methods in order to recover lost data in the event of a partial or complete device failure.
Traditional data recovery systems and methods may be grouped into one of two categories: local data recovery systems and remote data recovery systems. In both types of traditional data recover systems, the individual applications are tasked to be in operational command of the data backup operations, and in doing so, the applications periodically save their current application state. In local data recovery systems, the applications are configured to locally store the changes to the application state or possibly all of its state. In this approach, the application's current state is kept on a local storage device, which may be ideal for application performance and latency reduction; however, this traditional local storage approach requires that the applications dedicate large amounts of space on a storage device local to the computing device to store extra copies of the application data at various points in time. Over time, this sacrificed storage space becomes burdensome and cost prohibitive.
Further, this local recovery method becomes ineffective in the event of a device failure. As explained above, in traditional methods, the applications may save their state to local storage and thus effectively keep the changes to the application state on the local storage device. As such, if the computing device fails, then the local storage device storing the application's states likewise fails, and the data therein is lost. As such, when a device failure occurs, the lost data cannot be recovered.
In light of the inherent shortcomings of the traditional local recovery methods, the industry developed remote recovery systems and methods. In remote data recovery systems and methods, the applications are modified to coordinate with an external data recovery method employed by a storage device remote to the computing device. Moreover, the applications are further modified to periodically save its application state to the remote storage device. However, storing the application state to remote storage causes a new set of problems for the local device and its applications. For example, the application must be modified to send its data to a specific remote location. These modifications are time consuming and complicate the applications. Further, not all applications are modifiable, and as such, the remote recovery solution leaves may applications vulnerable to data loss. Further still, because each application must be modified to communicate with a specific remote system, upgrading a device and adding applications to the device becomes cumbersome and time consuming.
Another drawback of the remote recovery methods is latency. Because the application needs to periodically store its application state remotely, the transmission of the application's state information is in the critical path of the application performance. As such, when the application makes a record of the application's state, it sends the application state to a remote location for storage. Transmitting the application state causes a noticeable lag time in the application's execution because transmitting the application state to a remote storage location takes much more time than storing the application state on a local storage device as was done in the traditional local recovery method.
To resolve this lag time problem caused by traditional remote recovery systems, some traditional remote recovery systems reduced the frequency of creating application states and transmitting the application state the remote location. However, reducing the frequency of transmitting the application states makes the system device more vulnerable to data loss because a long amount of time may have lapsed between the transmission of the latest application state and the device failure. As such, to reduce the data loss vulnerability, some traditional remote recovery methods increase the frequency of transmitting the application states. Yet, increasing the frequency of the remote transmissions circles back to the original problem of traditional remote recovery systems, which increases application latency and causes the user to experience lag time while running the application.